package com.hzlh.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hzlh.core.utils.StringUtils;
import com.hzlh.domain.po.RolePo;
import com.hzlh.log.MethodLog;
import com.hzlh.service.RolePermService;
import com.hzlh.shiro.ShiroUser;

@Controller
@RequestMapping("role")
public class RoleController {
	
	@Autowired
	private RolePermService rolePermService;

	/**
	 * @Description: 获取角色分页列表数据
	 * @param pageIndex 当前页数
	 * @param pageSize 记录条数
	 * @return Map<String,Object>  
	 * @throws
	 * @author liu_wenfeng
	 * @date 2014年9月10日 下午3:34:26
	 */
	@MethodLog(key="ROLE.LIST")
	@RequiresPermissions("role:list")
	@RequestMapping("/page")
	@ResponseBody
	public Map<String,Object> page(int pageIndex,int pageSize){
		Subject subject = SecurityUtils.getSubject();
		ShiroUser shiroUser = (ShiroUser)subject.getPrincipal();
		List<RolePo> rolesList= shiroUser.getUser().getRoles();
		int weight=rolesList.get(0).getWeight();
		return rolePermService.rolePage(weight,pageIndex, pageSize);
	}
	
	@RequestMapping("/tree")
	@ResponseBody
	public List<RolePo> roleList(@RequestParam(value="name",required=false)String name){
		Map<String, Object> map = new HashMap<String, Object>();
		if(StringUtils.isNotBlank(name)){
			map.put("name", name);
		}
		return rolePermService.roleList(map);
	}
	
	
	/**
	 * @Description: 新增角色初始化跳转
	 * @return String  
	 * @throws
	 * @author liu_wenfeng
	 * @date 2014年9月10日 下午3:32:44
	 */
	@RequiresPermissions("role:add")
	@RequestMapping("/add")
	public String add() {
		return "role/add";  
	}
	
	/**
	 * @Description: 编辑角色
	 * @param model
	 * @param id
	 * @return String  
	 * @throws
	 * @author liu_wenfeng
	 * @date 2014年9月10日 下午3:31:23
	 */
	@RequiresPermissions("role:edit")
	@RequestMapping("/edit")
	public String edit(Model model, Long id){
		RolePo po = rolePermService.getRole(id);
		model.addAttribute("po", po);
		return "role/edit";
	}
	
	/**
	 * @Description: 分配角色
	 * @return String  
	 * @throws
	 * @author liu_wenfeng
	 * @date 2014年9月11日 下午4:09:26
	 */
	@RequiresPermissions("role:allot")
	@RequestMapping("/allot")
	public String allot(String roleIds ,Model model){
		model.addAttribute("permIds", rolePermService.getRolePermIds(Long.valueOf(roleIds)).toString());
		model.addAttribute("roleIds", roleIds);
		return "role/allot";
	}
	 
	/**
	 * @Description: 角色保存或修改
	 * @param po
	 * @return String  
	 * @throws
	 * @author liu_wenfeng
	 * @date 2014年9月10日 下午3:30:53
	 */
	@MethodLog(key="ROLE.SAVE")
	@RequiresPermissions(value={"role:save","role:update"},logical=Logical.OR)
	@RequestMapping("/save")
	public String save(RolePo po){
		//判断是否为空，如果不为空视为更新，否则，新增
		if(po.getId() != null){
			rolePermService.editRole(po);
		}else{
			rolePermService.addRole(po);
		}
		return "role/list";
	}
	
	/**
	 * @Description: 删除角色（单个或批量）
	 * @param id
	 * @return boolean  
	 * @throws
	 * @author liu_wenfeng
	 * @date 2014年9月3日 下午4:16:33
	 */
	@MethodLog(key="ROLE.DELETE")
	@RequiresPermissions("role:delete")
	@RequestMapping("/delete")
	@ResponseBody
	public boolean delete(Long[] ids){
		rolePermService.deleteRolePerm(ids);//清除关联表
		return rolePermService.deleteRole(ids);
	}
}
